﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using log4net;
using NHibernate;


namespace AccesoDatos.DAO
{
    public class DaoFactura
    {
        protected static readonly ILog log = LogManager.GetLogger(typeof(DaoFactura));
        public bool Insertar(Factura factura){
        log4net.Config.XmlConfigurator.Configure();

            ISession sesion = ConfiguracionNHibernate.GetCurrentSession();
            ITransaction transaccion = null;
            try
            {
                transaccion = sesion.BeginTransaction();
                sesion.Save(factura);
                transaccion.Commit();
                sesion.Flush();
                log.Warn("Objeto factura agregado con éxito");
           

            }
            catch (ADOException e)
            {
                e.GetBaseException();
                if (transaccion != null)
                {
                    log.Info("no se pudo agregar la factura numero:"+factura.Numero);
                    log.Info(e.Message);
                    transaccion.Rollback();
                    throw;

                }
            }
            return true;

        }
        public IList<Factura> SeleccionarTodos()
        {
            try
            {
                log4net.Config.XmlConfigurator.Configure();
                log.Info("Entra en el metodo SeleccionTodos de factura");
                ISession sesion = ConfiguracionNHibernate.GetCurrentSession();
                sesion.BeginTransaction();
                IQuery query = sesion.CreateQuery("from Factura");
                IList<Factura> retorna = (IList<Factura>)query.List<Factura>();
                sesion.Transaction.Commit();
                log.Info("Se retorna con éxito la lista de facturas");
                return retorna;

            }
            catch (Exception exception)
            {
                log.Error("Error al seleccionar todas las facturas");
                log.Error(exception.Message);
                throw new Exception();
            }


        }

        public Factura SeleccionarPorId(int id)
        {
            try
            {
                log4net.Config.XmlConfigurator.Configure();
                log.Info("Entra al metodo SeleccionarPorId de factura recibiendo el valor: " + id);
                ISession sesion = ConfiguracionNHibernate.GetCurrentSession();
                sesion.BeginTransaction();
                Factura busqueda = (Factura)sesion.Get(typeof(Factura), id);
                sesion.Transaction.Commit();
                log.Info("factura retornada con éxito");
                return busqueda;
            }
            catch (ADOException exception)
            {
                log.Error("se ha producido un error en la seleccion de factura por id");
                log.Error(exception.Message);
            }

            return null;
        }
    }
}
